package com.jyw.business.ast.domain.vo.web;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jyw.business.ast.domain.AstInfo;
import com.jyw.common.annotation.Conversion;
import com.jyw.common.constant.SysDictTypeConstant;
import com.jyw.common.enums.ConversionType;
import com.jyw.common.utils.bean.BeanUtils;
import com.jyw.system.domain.vo.SimpleFileVo;
import com.jyw.system.utils.ConversionUtil;
import com.jyw.system.utils.FileUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.FieldNameConstants;
import org.springframework.util.ObjectUtils;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@ApiModel("资产详情-资产信息")
@Data
@FieldNameConstants
@NoArgsConstructor
public class AstInfoDetailVo {

    /**
     * ID
     */
    @ApiModelProperty("ID")
    private Long id;

    /**
     * 名称
     */
    @ApiModelProperty("名称")
    private String name;

    /**
     * 规格型号
     */
    @ApiModelProperty("规格型号")
    private String model;

    /**
     * 使用日期
     */
    @ApiModelProperty("使用日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date useDate;

    /**
     * 使用年限
     */
    @ApiModelProperty("使用年限")
    private BigDecimal years;

    @ApiModelProperty("使用年限单位")
    @Conversion(value = ConversionType.DICT, dictType = SysDictTypeConstant.AST_ASSET_USE_UNIT)
    private String useUnit;

    @ApiModelProperty("使用年限单位标签")
    private String userUnitToName;

    /**
     * 设备状态(数据字典)
     */
    @ApiModelProperty("设备状态(数据字典)")
    @Conversion(value = ConversionType.DICT, dictType = SysDictTypeConstant.AST_ASSET_STATE)
    private String equipmentState;

    @ApiModelProperty("设备状态标签")
    private String equipmentStateToName;

    /**
     * 资产类型(数据字典)
     */
    @ApiModelProperty("资产类型(数据字典)")
    @Conversion(value = ConversionType.DICT, dictType = SysDictTypeConstant.AST_ASSET_TYPE)
    private String assetsType;

    @ApiModelProperty("资产类型标签")
    private String assetsTypeToName;

    /**
     * 资产来源(数据字典)
     */
    @ApiModelProperty("资产来源(数据字典)")
    @Conversion(value = ConversionType.DICT, dictType = SysDictTypeConstant.AST_ASSET_SOURCE)
    private String assetsSource;

    @ApiModelProperty("资产来源标签")
    private String assetsSourceToName;

    /**
     * 资产编号
     */
    @ApiModelProperty("资产编号")
    private String assetsCode;

    /**
     * 设备S/N码
     */
    @ApiModelProperty("设备S/N码")
    private String seriesNumb;

    /**
     * 是否公共设备
     */
    @ApiModelProperty("是否公共设备 ")
    private Integer isPublic;

    /**
     * 计量周期
     */
    @ApiModelProperty("保养维护周期")
    private Integer meteringTimer;

    @ApiModelProperty("保养维护周期单位(数据字典)")
    @Conversion(value = ConversionType.DICT, dictType = SysDictTypeConstant.AST_ASSET_METERING_UNIT)
    private String meteringUnit;

    @ApiModelProperty("保养维护周期单位标签")
    private String meteringUnitToName;

    /**
     * 使用科室
     */
    @ApiModelProperty("使用科室")
    @Conversion(value = ConversionType.DEPT, name = Fields.useDeptName)
    private Long useDept;

    @ApiModelProperty("使用科室名称")
    private String useDeptName;

    /**
     * 所在位置
     */
    @ApiModelProperty("所在位置")
    private String place;

    /**
     * 使用责任人
     */
    @ApiModelProperty("使用责任人")
    @Conversion(name = Fields.personLiableName)
    private Long personLiable;

    @ApiModelProperty("使用责任人名称")
    private String personLiableName;

    /**
     * 维保期限
     */
    @ApiModelProperty("维保期限")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date maintainTerm;

    /**
     * 维保公司
     */
    @ApiModelProperty("维保公司")
    @Conversion(value = ConversionType.DEPT, name = Fields.maintainCompanyName)
    private Long maintainCompany;

    @ApiModelProperty("维保公司名称")
    private String maintainCompanyName;

    /**
     * 维保责任人
     */
    @ApiModelProperty("维保责任人")
    @Conversion(name = Fields.maintainUserName)
    private Long maintainUser;

    @ApiModelProperty("维保责任人名称")
    private String maintainUserName;

    /**
     * 资产维护类型(1用户 2小组 3科室)
     */
    @ApiModelProperty("资产维护类型(1用户 2小组 3科室)")
    private Integer maintainInsideType;

    /**
     * 指定维护对象标识
     */
    @ApiModelProperty("指定维护对象标识")
    private Long maintainObjId;

    @ApiModelProperty("指定维护对象名称")
    private String maintainObjName;

    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remark;

    /**
     * 附件
     */
    @ApiModelProperty("附件")
    private List<SimpleFileVo> enclosure;

    /**
     * 采购编号
     */
    @ApiModelProperty("采购编号")
    private String purchaseCode;

    /**
     * 项目名称
     */
    @ApiModelProperty("项目名称")
    private String projectName;

    /**
     * 采购日期
     */
    @ApiModelProperty("采购日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date purchaseDate;

    /**
     * 采购价格
     */
    @ApiModelProperty("采购价格")
    private BigDecimal purchasePrice;

    /**
     * 采购数量
     */
    @ApiModelProperty("采购数量")
    private Long purchaseNumber;

    /**
     * 品牌(数据字典)
     */
    @ApiModelProperty("品牌(数据字典)")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.AST_ASSET_BRAND)
    private String brand;

    @ApiModelProperty("品牌标签")
    private String brandToName;

    /**
     * 生产厂商
     */
    @ApiModelProperty("生产厂商")
    private String manufacturer;

    /**
     * 售后电话
     */
    @ApiModelProperty("售后电话")
    private String salesPhone;

    /**
     * 供应商
     */
    @ApiModelProperty("供应商")
    private String supplier;

    /**
     * 供应商电话
     */
    @ApiModelProperty("供应商电话")
    private String supplierPhone;

    /**
     * 产地
     */
    @ApiModelProperty("产地")
    private String originPlace;

    /**
     * IP地址
     */
    @ApiModelProperty("IP地址")
    private String ipPlace;

    /**
     * MAC地址
     */
    @ApiModelProperty("MAC地址")
    private String macPlace;

    /**
     * 操作系统(数据字典)
     */
    @ApiModelProperty("操作系统(数据字典)")
    @Conversion(value = ConversionType.DICT,dictType = SysDictTypeConstant.AST_ASSET_OPERATING_SYSTEM)
    private String operatingSystem;

    @ApiModelProperty("操作系统标签")
    private String operatingSystemToName;

    /**
     * 系统版本
     */
    @ApiModelProperty("系统版本")
    private String systemVersion;

    /**
     * 配置信息
     */
    @ApiModelProperty("配置信息")
    private String configuration;

    /**
     * 状态(1启用0禁用)
     */
    @ApiModelProperty("状态(1启用0禁用)")
    private Integer state;

    /**
     * 所属巡检单元
     */
    @ApiModelProperty("所属巡检单元")
    private Long pertainUnit;

    @ApiModelProperty("所属巡检单元名称")
    private String pertainUnitName;

    public AstInfoDetailVo(AstInfo info) {
        BeanUtils.copyProperties(info,this);
        setEnclosure(FileUtils.IdToFile(info.getEnclosure()));
        if(!ObjectUtils.isEmpty(getMaintainInsideType())){
            setMaintainObjName(ConversionUtil.getObjName(getMaintainInsideType().toString(),getMaintainObjId()));
        }
    }
}
